首页 > 试题广场 >

整数与IP地址间的转换

[编程题]整数与IP地址间的转换
  • 热度指数:210940 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字             相对应的二进制数
10                   00001010
0                    00000000
3                    00000011
193                  11000001

组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

数据范围:保证输入的是合法的 IP 序列



输入描述:

输入 
1 输入IP地址
2 输入10进制型的IP地址



输出描述:

输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1

输入

10.0.3.193
167969729

输出

167773121
10.3.3.193
import sys

#for line in sys.stdin:
#    a = line.split()
#   print(int(a[0]) + int(a[1]))
'''
分为2种情况
情况1:输入是ip地址,需要将ip地址转化为十进制的整数
此时len(s.split("."))==4
情况2:输入是十进制的整数,需要将十进制的整数转化为ip地址
此时len(s.split("."))==1
'''

s2=''
L2=[]
L3=[]
L4=[]
j=1
while j<=2:
    try:

        s=input()
        j+=1
        if len(s.split(".")) == 4:
            L=s.split(".")
            for x in L:
                x=str(bin(int(x)))
                x=x[2:]
                x=x.rjust(8,"0")
                s2=s2+x
            print(int(s2,2))
        elif len(s.split()) ==1:
            b=str(bin(int(s)))[2:]
            b=b.rjust(32,"0")
            for i in range(4):
                L2.append(b[:8])
                b=b[8:]
            for x in L2:
                L3.append(int(x,2))
            for x in L3:
                L4.append(str(x))
            print(".".join(L4))
        else:
            pass
    except:
        pass
发表于 2023-02-12 13:35:18 回复(0)
s = input("输入一个合法IPv4地址:")
num = int(input("输入一个整数将转换为IP地址:"))
ls = s.split('.') #将IP地址用'.'分隔为列表
res = int(ls[0])*2**24 + int(ls[1])*2**16 + int(ls[2])*2**8 + int(ls[3]) #求和即的转换成10进制的IP
b_num = str(bin(num))[2:] #将输入的整数转成二进制再转成字符串,去掉最前面0b
#将字符串补齐为32位
if len(b_num) != 32: 
    b_num = '0'*(32-len(b_num)) + b_num
#每八位转为10进制进行拼接
ip = str(int(b_num[0:8],2)) + '.' + str(int(b_num[8:16],2)) + '.' + str(int(b_num[16:24],2)) + '.' + str(int(b_num[24:],2))
print(res)
print(ip)

发表于 2022-09-14 15:58:48 回复(0)
import sys
for line in sys.stdin.readlines():
    if '.' not in line:
        a = bin(int(line))
        aa = {}
        aa[0] = int(a[-8:], 2)
        aa[1] = int(a[-16:-8], 2)
        aa[2] = int(a[-24:-16], 2)
        aa[3] = int(a[:-24], 2)
        print(str(aa[3])+'.'+str(aa[2])+'.'+str(aa[1])+'.'+str(aa[0]))
    else:
        b = ''
        for i in line.split('.'):
            b += str(bin(int(i)))[2:].rjust(8, '0')
        print(int(b, 2))

发表于 2022-09-06 11:52:00 回复(0)
input_ip_list = input().split(".")
input_ip_int = input()
numstr = ""
# ip转10进制
for num in input_ip_list:
    temp = bin(int(num, 10))[2:]
    temp = "0"*(8-len(temp))+temp
    numstr += temp
    temp = ""
# 10进制转ip
temp = bin(int(input_ip_int,10))[2:]

print(int(numstr,2))
print(int(temp[:-24],2),end=".")   
print(int(temp[-24:-16],2),end=".")   
print(int(temp[-16:-8],2),end=".") 
print(int(temp[-8:],2))
发表于 2022-09-02 21:29:18 回复(0)
a=input()
b=int(input())
la=a.split('.')
x='' for i in la:
    j=bin(int(i))[2:]
    y=(8-len(j))*'0'+bin(int(i))[2:]
    x=x+y
n1=int(x,2) print(n1)
c=bin(b)[2:] if len(c)%8!=0:
    d=(8-len(c)%8)*'0'+c else:
    d=c
y='' for j in range(0,len(d),8):
    h=int(d[j:j+8],2)
    y=y+str(h)+'.' print(y.strip('.'))
发表于 2022-09-02 02:14:16 回复(0)
while True:
    try:
        str_ip = input()
        if "." in str_ip: 
            p_list = str_ip.split('.')
            b_list = ['{:0>8b}'.format(int(p)) for p in p_list]
            str_con = ''.join(b_list)
            print(int(str_con, 2))
        else:
            str_con = '{:0>32b}'.format(int(str_ip))
            b_list = [str_con[i:i+8] for i in [0,8,16,24]]
            p_list = [str(int(b, 2)) for b in b_list]
            print('.'.join(p_list))
    except:
        break
发表于 2022-09-01 12:58:25 回复(0)
s1 = list(map(int,input().replace('.',' ').split()))
s2 = bin(int(input()))[2:].zfill(32)
s1_1,s2_1 = '',''
for i in s1:
    s1_1 += bin(i)[2:].zfill(8)
for i in range(4):
    b = int(s2[i * 8:i * 8 + 8] , 2)
    s2_1 += str(b) + '.'    
print(int(s1_1,2))
print(s2_1[:-1])

发表于 2022-08-31 21:24:28 回复(0)
while True:
    try:
        s = input()
        if len(s.split(".")) == 1:
            number = bin(int(s))[2::].rjust(32,'0')
            lest = [str(int(number[0:8],2)),str(int(number[8:16],2)),str(int(number[16:24],2)),str(int(number[24:32],2))]
            print(".".join(lest))
            
        else:
            s1 = s.split(".")
            lst = list(map(int,s1))
            new_lst = []
            for i in lst:
                num1 = bin(i)
                num = str(num1)[2::].rjust(8,"0")
                new_lst.append(str(num))
            s2 = (("").join(new_lst))
            print(int(s2,2))                 
    except:
        break
发表于 2022-08-28 16:32:22 回复(0)
# 将IP转换为10进制
IP = input().split(".")
li = [bin(int(i))[2:].rjust(8, "0") for i in IP]
print(int("".join(li), 2))

# 将10进制数转为IP
N = input()
s = bin(int(N))[2:]
# print(s)
n = 0 #找出前面补多少个0
for i in range(8):
    if (len(s)+i) % 8 == 0:
        break
    else:
        n += 1
s = s.rjust(len(s)+n, "0")
# print(s)
li1 = []
for j in range(0, len(s), 8):
    li1.append(str(int(s[j: j+8], 2)))
print(".".join(li1))
发表于 2022-08-25 00:10:50 回复(0)
其实不用转二进制吧。。。
ip = [int(i) for i in input().split('.')]
num = int(input())

out_num = 0
for i in range(len(ip)):
    out_num += ip[i] * 256 ** (3-i)
    
print(out_num)

out_ip = []

while num != 0:
    out_ip.insert(0, num % 256)
    num = num // 256

print('.'.join(str(i) for i in out_ip))


发表于 2022-08-19 06:24:42 回复(0)
def transfer(a, b):
    if b == 0 :   #普通网址转换为10进制网址
        a = list(map(int,a.split('.')))
        bin_a = ''
        for i in a:
            bin_a += bin(i)[2:].rjust(8,'0')
        return int('0b' + bin_a, 2)
    elif b == 1:  #10进制网址转化为普通网址
        str_a = ''
        l = []
        m = bin(int(a))[2:].rjust(32,'0')
        for j in range(0,32,8):  
            l.append(int(m[j:j+8],2))
        str_a = str(l[0])+'.'+str(l[1])+'.'+str(l[2])+'.'+str(l[3])
        return str_a
    
while True:
    try:
        print(transfer(input(),0))
        print(transfer(input(),1))
    except:
        break
    

发表于 2022-08-17 21:55:26 回复(0)
def fc1(): # 定义将ip转换为十进制的函数
    n = input().split('.')
    ls = []
    for i in n:
        bit = bin(int(i)).replace("0b", "") # 将ip的每个值转换成二进制
        if len(bit) < 8:
            bit = (8-len(bit))*'0'+bit # 如果转换的二进制长度不为8,前面用0补齐
            ls.append(str(bit))
        else:
            ls.append(bit)
    ip = ''.join(ls)
    print(int(ip,2)) # int(n,2),将二进制转换为十进制

def fc2(): # 定义将十进制转换为ip的函数
    n = int(input())
    m = bin(n).replace("0b","") # 先将十进制转换为二进制
    if len(m) < 32:
        m = (32-len(m))*"0"+m # 将二进制长度补齐到32位
    else:
        pass
    ls = [m[0:8],m[8:16],m[16:24],m[24:32]] # 将转换后的二进制,每8个字符对应ip的一个值,刚好4个值
    ip = []
    for i in ls:
        i = int(i,2) # 将二进制转换为整数
        ip.append(str(i))
    print('.'.join(ip))
while True:
    try:
        fc1()
        fc2()
    except:
        break

发表于 2022-08-15 22:16:08 回复(0)
def ten2two(x, l):
    x = int(x)
    out = ''
    for i in range(8*l):
        out = str(x%2) + out
        x = int(x/2)    
    return out


def ten2IP(x):
    out = []
    x = ten2two(int(x), 4)
    for i in range(4):
        out.append(x[i*8:i*8+8])
    for i in range(4):
        out[i] = int(out[i], 2)
    outt = str(out[0])
    for j in range(3):
        outt += '.{}'.format(out[j+1])
    return outt


a = input().split('.')
b = ''
for x in a:
    b = b + ten2two(x, 1)
print(int(b, 2))
print(ten2IP(input()))

发表于 2022-08-09 19:11:15 回复(0)
#看到楼下用256进制属实震惊
ip = input().split('.')
new_lst = []
for i in ip:
    new = bin(int(i))[2:]
    new_lst.append('0'*(8-len(new))+new)
print(int(''.join(new_lst), 2))
n = int(input())
NEW = '0'*(32-len(bin(n)[2:]))+bin(n)[2:]
NEW_lst = []
for i in range(0, 25, 8):
    NEW_lst.append(str(int(('0b'+NEW[i:i+8]), 2)))
print('.'.join(NEW_lst))

发表于 2022-07-25 02:14:46 回复(0)
def change_data(d,my_list):
    a,b = d//2,d%2
    my_list.append(str(b))
    if a!=0:
        change_data(a,my_list)
input_ip = input()
cb_d2=''
for i in input_ip.split('.'):
    d2_l=[]
    change_data(int(i),d2_l)
    d2 = ''.join(d2_l[::-1])
    d2 = '0'*(8-len(d2))+d2
    cb_d2+=d2
print(int(cb_d2,2))
input_ip = input()
d2_l = []
change_data(int(input_ip),d2_l)
d2 = ''.join(d2_l[::-1])
d2 = '0'*(32-len(d2))+d2
data=[]
for i in range(4):
    data.append(str(int(d2[i*8:(i+1)*8],2)))
print('.'.join(data))
发表于 2022-07-19 19:59:05 回复(0)
python3 bin() int()
while True:
    try:
        encode = input()
        encode = encode.split(".")
        output = ""
        for element in encode:
            element = bin(int(element, 10))
            element = "%08d"%(int(element[2:]))
            output  = output + element
        output = int(output, 2)
        print(output)
        
        decode = input()
        decode = bin(int(decode, 10))
        output = ""
        decode = "%032d"%(int(decode[2:]))
        output = output + str(int(decode[0:8],2)) + "."
        output = output + str(int(decode[8:16],2)) + "."
        output = output + str(int(decode[16:24],2)) + "."
        output = output + str(int(decode[24:32],2))
        print(output)
    except:
        break



发表于 2022-07-15 16:06:20 回复(0)
def ip2num(ip):
    bin_list = []
    ip_list = ip.split('.')
    for i in ip_list:
        bin_list.append(bin(int(i))[2:].rjust(8,'0'))   
    s = '0b'+''.join(bin_list)
    return int(s,2)
def num2ip(num):
    num_list = []
    bin_num = bin(int(num))[2:].rjust(32,'0')
    for i in range(4):
        a = '0b' + bin_num[i*8:(i+1)*8]
        num_list.append(str(int(a,2)))
    return '.'.join(num_list)
while True:
    try:
        s = input()
        if '.' in s:
            print(ip2num(s))
        else:
            print(num2ip(s))
    except:
        break

发表于 2022-07-15 02:59:59 回复(0)
命名挺烂的。。。将就看
s1 = input().split('.')
s2 = input()
out1 = ''
out2 = ''
for i in s1:
    j = bin(int(i))[2:]
    if len(j) <=8:
        j = (8-len(j))*'0' + j
    out1 +=j
num = 0
for i in range(len(out1)):
    if int(out1[i]) != 0:
        num += 2**(len(out1)-i-1)
        
        
ss = bin(int(s2))[2:]
if len(ss) != 32:
    ss = '0'*(32-len(ss)) + ss
sss = ''
i = 0
while i<=3:
    k = ss[8*i:8*(i+1)]
    num1 = 0
    for j in range(8):
        if int(k[j]) != 0:
            num1 += 2**(7-j)
    sss = sss + str(num1) + '.'
    i += 1
print(num)
print(sss[:-1])

发表于 2022-07-13 13:58:43 回复(0)
            s1 = input()
            s2 = input()
            st1 = s1.split('.')
            st2 = bin(int(s2)).replace('0b', '').rjust(32, '0')
            res1, lt2 = '', []
            for i in st1:
                res1 += str(bin(int(i)).replace('0b', '').rjust(8, '0'))
            
            for j in range(0, len(st2), 8):
                tmp = st2[j:j+8]
                lt2.append(str(int(tmp, 2)))
            print(int(res1, 2))
            print('.'.join(lt2))
发表于 2022-06-12 18:16:57 回复(0)
while True:
    try:
        ip1 = map(int, input().split('.'))
        ip2 = int(input())
        st1 = ''
        for i in ip1:
            st1 += '{:0>8b}'.format(i)
        print(int(st1, 2))
        st2 = []
        b_ip1 = '{:0>32b}'.format(ip2)
        for i in range(4):
            st2.append(b_ip1[i * 8 : (i + 1) * 8])
        print('.'.join(map(str, map(lambda x: int(x, 2), st2))))
    except:
        break

发表于 2022-06-02 15:00:18 回复(0)

问题信息

难度:
73条回答 56798浏览

热门推荐

通过挑战的用户

查看代码